<template>
  <div class="son">
    <p>我是子组件</p>
    <p>传过来的值：第{{childInfo1}}名</p>
    <button @click="childInfo1 ++">+1</button>
    <p>传过来的值：第{{info2}}名</p>
    <p>传过来的值：{{info3}}</p>
    <p>传过来的值：{{info4}}</p>
    <p>{{info5.name}}</p>
    <button @click="send">子传父</button>
    <p>子传父：将子组件中的数据传递给父组件。通过$emit方法，发射自定义事件，携带参数；在父组件中监听对应的事件。</p>
  </div>
</template>

<script>
export default {
  // 接受来自父组件的数据，当做data中的数据使用
  // props: ['info1', 'info2', 'info3', 'info4']
  props: {
    // 规定数据类型
    info1: Number,
    info2: {
      type: [Number, String]
    },
    // 必填项（必传）
    info3: {
      type: [Number, String],
      required: true
    },
    // 默认值,非必填
    info4: {
      default: '我是默认值，如果你不传，我就显示'
    },
    // 自定义校验器,根据业务逻辑确定
    info5: {
      validator(val) {
        // 对象的name必须是Tom
        return val.name == 'Tom'
      }
    }
  },
  data() {
    return {
      // 新增一个变量，接受props中的数据
      childInfo1: this.info1,
      msg1: '我是子组件的数据，我要传给父组件'
    }
  },
  computed: {
    newInfo1() {
      return this.info1
    }
  },
  methods: {
    send() {
      // 发射自定义事件
      this.$emit('inputson', this.msg1);
    }
  }
}
</script>

<style>
.son {
  width: 80%;
  margin-left: 5px;
  border: 4px solid red;
}
</style>